icon

nazo6.dev

一覧に戻る
2025/1/14 2025/2/1 2 min read

BLE Bondigメモ


主にSoftDevice。

#ボンディング時に渡される情報

master_id = {
    ediv: u16,
    rand: [u8; 8],
}

enc = {
    ltk: [u8; 16],
    flags: u8,
}

peer_id = {
	irk: [u8; 16],
    addr: {
        flags: u8,
        bytes: [u8; 6],
    }
}
  • master_id: 暗号化情報を識別するための情報

  • enc: ボンディングで保存されるべき暗号化情報

    • ltk: Long Term Key。これがメインで用いられる暗号化のためのキーである。
    • flags: 要調査。ボンディングすべきかなどのフラグを含んでいるらしい…?

つまり、Map<(ediv, rand), ltk>のような構造となっていることがわかる。再接続する再には送られてきたmaster_idを用いてltkをストレージなどから読み出し、その値を暗号化に用いる。

  • peer_id: クライアントを識別するための情報。暗号化とは違う
    • addr: いわゆるBluetoothのアドレスであるが、プライバシーのためにこのアドレスは接続の度に変化することが普通である。ではどうやってクライアイントを識別するのか。これが次のirkである。
    • irk: Rustのnrf-softdeviceでは実際はこの値はprivateな値になっており、peer_idが同じものか判定するメソッドのみが提供されている。
Share this article:
一覧に戻る

© 2025 nazo6. All rights reserved.